Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
microrouter
Advanced tools
:station: Micro Router - A tiny and functional router for ZEIT's micro
async/await
Install as project dependency:
$ yarn add microrouter
Then you can define your routes inside your microservice:
const { send } = require('micro')
const { router, get } = require('microrouter')
const hello = (req, res) => send(res, 200, `Hello ${req.params.who}`)
const notfound = (req, res) => send(res, 404, 'Not found route')
module.exports = router(get('/hello/:who', hello), get('/*', notfound))
async/await
You can use your handler as an async function:
const { send } = require('micro')
const { router, get } = require('microrouter')
const hello = async (req, res) =>
send(res, 200, await Promise.resolve(`Hello ${req.params.who}`))
module.exports = router(get('/hello/:who', hello))
Each route is a single basic http method that you import from microrouter
and has the same arguments:
get(path = String, handler = Function)
post(path = String, handler = Function)
put(path = String, handler = Function)
patch(path = String, handler = Function)
del(path = String, handler = Function)
head(path = String, handler = Function)
options(path = String, handler = Function)
A simple url pattern that you can define your path. In this path you can set your parameters using a :
notation. The req
parameter from handler
will return this parameters as an object.
For more information about how you can define your path, see url-pattern that's the package that we're using to match paths.
The handler
method is a simple function that will make some action base on your path.
The format of this function is (req, res) => {}
req.params
As you can see below, the req
parameter has a property called params
that represents the parameters defined in your path
:
const { router, get } = require('microrouter')
const request = require('some-request-lib')
// service.js
module.exports = router(
get('/hello/:who', (req, res) => req.params)
)
// test.js
const response = await request('/hello/World')
console.log(response) // { who: 'World' }
req.query
The req
parameter also has a query
property that represents the queries
defined in your requision url:
const { router, get } = require('microrouter')
const request = require('some-request-lib')
// service.js
module.exports = router(
get('/user', (req, res) => req.query)
)
// test.js
const response = await request('/user?id=1')
console.log(response) // { id: 1 }
By default, router doens't parse anything from your requisition, it's just match your paths and execute a specific handler. So, if you want to parse your body requisition you can do something like that:
const { router, post } = require('microrouter')
const { json, send } = require('micro')
const request = require('some-request-lib')
// service.js
const user = async (req, res) => {
const body = await json(req)
send(res, 200, body)
}
module.exports = router(
post('/user', user)
)
// test.js
const body = { id: 1 }
const response = await request.post('/user', { body })
The package url-pattern has a lot of options inside it to match url. If you has a different need for some of your paths, like make pattern from a regexp, you can pass a instance of UrlPattern
as the path parameter:
const UrlPattern = require('url-pattern')
const { router, get } = require('microrouter')
const routes = router(
get(
new UrlPattern(/^\api/),
() => 'This will match all routes that start with "api"'
)
)
If you want to create nested routes, you can define a namespace for your routes using the withNamespace
high order function:
const { withNamespace, router, get } = require('microrouter')
const { json, send } = require('micro')
const oldApi = withNamespace('/api/v1')
const newApi = withNamespace('/api/v2')
const routes = router(
oldApi(get('/', () => 'My legacy api route')),
newApi(get('/', () => 'My new api route'))
)
PS: The nested routes doesn't work if you pass a UrlPattern instance as path argument!
FAQs
🚉 A tiny and functional router for ZEIT's Micro
We found that microrouter demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.